【Informatica CDI】S3からSnowflakeへのデータロード
はじめに
データ事業本部ビッグデータチームのkasamaです。今回はS3からSnowflakeへのデータロードを試してみたいと思います。S3からSnowflakeへはInformaticaを使わずともSnowflakeのCOPYコマンドでできますが、Infomaticaだとノーコードでできるという利点があります。
以下を参考に進めます。
前提条件
1. Snowflakeの初期設定
まずはSnowflake側でSQLを実行し、初期設定を行います。WAREHOUSEやユーザーはデフォルトを活用し、その他は今回用に作成します。
---> set Warehouse Context
USE WAREHOUSE compute_wh;
-- database作成
CREATE DATABASE IF NOT EXISTS cm_kasama_infa_db;
-- schema作成
CREATE SCHEMA IF NOT EXISTS cm_kasama_infa_db.s3_data;
-- table作成
CREATE OR REPLACE TABLE cm_kasama_infa_db.s3_data.calendar
(
full_date DATE,
day_name VARCHAR(10),
month_name VARCHAR(10),
day_number VARCHAR(2),
full_year VARCHAR(4),
holiday BOOLEAN
);
-- ETL用ロールの作成
CREATE ROLE etl_role;
-- ウェアハウスの使用権限
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE etl_role;
-- データベースへのフル権限(現在と将来)
GRANT ALL ON DATABASE cm_kasama_infa_db TO ROLE etl_role;
GRANT ALL ON ALL SCHEMAS IN DATABASE cm_kasama_infa_db TO ROLE etl_role;
GRANT ALL ON FUTURE SCHEMAS IN DATABASE cm_kasama_infa_db TO ROLE etl_role;
GRANT ALL ON ALL TABLES IN DATABASE cm_kasama_infa_db TO ROLE etl_role;
GRANT ALL ON FUTURE TABLES IN DATABASE cm_kasama_infa_db TO ROLE etl_role;
-- ユーザーにロール付与
GRANT ROLE etl_role TO USER KASAMA;
2. S3 サンプルデータの準備
以下の内容でCSVファイルを作成し、S3 BucketへUploadします。
full_date,day_name,month_name,day_number,full_year,holiday
2024-01-01,Monday,January,01,2024,true
2024-01-02,Tuesday,January,02,2024,false
2024-01-03,Wednesday,January,03,2024,false
2024-01-04,Friday,January,04,2024,true
3. Informatica CloudのSnowflake接続の作成
管理者画面の接続
→ 新しい接続の作成
からタイプSnowflake Data Cloud
を選択し、接続情報を入力します。
※ 以下リンクに記載の通り、Snowflake Cloud Data Warehouse
は古いコネクタのようですので、Snowflake Data Cloud
を使用しましょう。
FAQ: What is the difference between Snowflake Data Cloud (Informatica Cloud) and Snowflake Cloud Data Warehouse (Informatica) connector in Informatica Cloud product ?
- 接続名: 任意のコネクタ名
タイプ: Snowflake Data Cloud - 認証: 標準
- ユーザー名: Snowflake上で
SELECT CURRENT_USER();
で表示された値 - パスワード: 上記ユーザーに紐づくパスワード
- アカウント: Snowflakeの画面上で
アカウント
→アカウントURLをコピー
で取得できるURLのhttps://
と.snowflakecomputing.com
の間の値 - ウェアハウス: COMPUTE_WH
- ロール: etl_role
マッピング作成
- ソースの設定
- S3接続を選択
- ファイルパス:
source/snowflake/calendar.csv
- ヘッダー行あり: チェック
- 式の定義
- フィールド名:
exp_full_date
- タイプ:
date/time
- 式:
To_Date(full_date, 'YYYY-MM-DD')
- フィールド名:
- ターゲットの設定
- Snowflake接続を選択
- テーブル:
calendar
- 操作: Insert
- full_dateは先ほどの
exp_full_date
をマッピング
実行結果確認
マッピング実行し、問題なく成功しました。
Snowflake上でもデータ確認できました。
SELECT * FROM cm_kasama_infa_db.s3_data.calendar;
クリーンアップ(必要な場合)
-- データベースを削除
DROP DATABASE IF EXISTS cm_kasama_infa_db;
-- ロールの付与解除
REVOKE ROLE etl_role FROM USER KASAMA;
-- ロールを削除
DROP ROLE IF EXISTS etl_role;
最後に
接続情報にはいくつかパターンがあり、最も簡易的なパターンで試したので、プロジェクトで実際に扱う際は再度検討したいと思います。